package com.qmth.stmms.commons.domain.entity;

import java.io.Serializable;

import javax.persistence.*;

/**
 * 抽象实体类，可作为所有领域实体的基类。
 *
 * @author zhengmin
 *
 */
@MappedSuperclass
public abstract class BaseEntity implements Serializable {

    private static final long serialVersionUID = 8882145540383345037L;

    /**
	 * 取得实体的Id。实体类的每个实例都必须有个唯一Id以标识自身。
	 * 实体Id必须是可序列化的。
	 * @return 实体实例的 Id.
	 */
	protected abstract Serializable getId();
    
    @Override
    public int hashCode(){
    	return this.getId().hashCode();
    }
    
    @Override
    public boolean equals(Object obj){
    	if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		BaseEntity other = (BaseEntity)obj;
		if(!this.getId().equals(other.getId()))
			return false;
    	return true;
    }
    
}
